package base.sort;

import java.util.Arrays;

/**
 * 描述：
 *      插入排序，每次将未排序数列的第一个数插入到已排序数列的合适位置，类似于打扑克摸排
 *      最好的情况是已经排序的数组，此时时间复杂度为O(n)，
 *      最坏的情况是逆序数组，此时时间复杂度为O(n^2)
 * @author hl
 * @version 1.0
 * @date 2020/10/23 13:54
 */
public class Code_03_InsertionSort {

    public static void main(String[] args) {
        int[] arr = {2, 7, 4, 6, 3, 1};
        new Code_03_InsertionSort().insertSort(arr);
        System.out.println(Arrays.toString(arr));
    }

    public void insertSort(int[] arr){
        if (arr != null & arr.length < 2) {
            return;
        }
        for (int i = 1; i < arr.length; i++) {
            for (int j = i - 1; j >= 0 && arr[j] > arr[j+1]; j--) {
                swap(arr, j, j+1);
            }
        }
    }
    public void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}
